package com.my.java.algorithm.recursion;

public class Hanoi {
        /**
         * 将A汉诺塔上的n个盘子通过C移动到B的递归方法
         * @param n    //汉诺塔上盘子的个数
         * @param A    //开始时有盘子的汉诺塔
         * @param B    //要将盘子移动到上面的目标汉诺塔
         * @param C    //中介汉诺塔
         * @throws IllegalArgumentException
         *                 when n<=0
         */
        public static void HanoiTowers1(int n, char A, char B, char C) {
                if (n <= 0) {
                        throw new IllegalArgumentException("n must be >=1");
                }
                if (n == 1) {
                        System.out.println(n+"层  "+A + "->" + C);
                }
                else {
                        HanoiTowers1(n - 1, A, C, B); // 将除去最大的盘子的n个盘子从A通过C移动到B
                        System.out.println(n+"层  "+A + "->" + C);// 将最大的盘子从A移动到B
                        HanoiTowers1(n - 1, B, A, C); // 将除去最大的盘子的n-1个盘子从B通过A移动到C
                }
        }

        public static void HanoiTowers1(int n) {
                HanoiTowers1(n, 'A', 'B', 'C');
        }
        
        public static void main(String[] args) {
                HanoiTowers1(3);
        }
}
